package com.aleyn.router.core

import android.os.Parcelable
import androidx.annotation.Keep
import kotlinx.parcelize.IgnoredOnParcel
import kotlinx.parcelize.Parcelize

/**
 * @author: Aleyn
 * @date: 2023/6/9 17:48
 *
 * 路由元数据类，用于存储单个路由的所有信息。
 * 这是一个数据类，实现了 Parcelable 接口，使其可以在组件间传递。
 * @param path 路由路径，全局唯一。
 * @param description 路由描述，用于说明用途。
 * @param other 预留字段，可用于扩展。
 * @param className 目标页面的完整类名。
 */

@Keep
@Parcelize
data class RouteMeta(
    val path: String = "",
    val description: String = "",
    val other: Int = 0,
    val className: String = ""
) : Parcelable {

    /**
     * 目标页面的 Class 对象。
     * 使用 @IgnoredOnParcel 注解，表示此字段不参与序列化。
     * 采用懒加载方式，在首次访问时通过反射获取 Class 对象，并缓存起来，避免重复加载。
     */
    @IgnoredOnParcel
    var targetClass: Class<*>? = null
        get() {
            if (field == null) {
                field = Class.forName(className)
            }
            return field
        }
}